

void main(){
  print('8 is Ok?：${isOk(8)}');
  saySomething("Bob", "King Bob!","today");
  saySomething("Bob", "King Bob!");

  print("");
  settings("today",isOk: true, name: "lily");
}


// todo 1. 函数声明
//方法的构成
//返回值类型 + 方法名 + 参数
int sum(int a, int b){
  return a+b;
}

//Dart函数声明如果没有显式声明返回值类型时会默认当做dynamic处理，注意，函数返回值没有类型推断
isOk(int num){
  var isOk = num>6;
  return isOk;
}

//对于只包含一个表达式的函数，可以使用简写语法：
bool isBigNum(int num) => num>666;


//todo 2. 函数作为变量
var say = (String name){
  print("hello $name");
};
void callSay(){
  say("lily");
}

//todo 3. 函数作为参数传递
void execute(var callback){ //参数类型为函数
  callback(); //执行传入的函数
}
//调用execute，将箭头函数作为参数传递
void callExecute(){
  execute(() => print("hello world"));
}

//todo 3.1）可选的位置参数
//包装一组函数参数，用[]标记为可选的位置参数，并放在参数列表的最后面：
void saySomething(String name,String msg,[String? time = "now"]){
  print("$name say $msg time: $time");
}

//todo 3.2）可选的命名参数
//定义函数时，使用{param1, param2, …}，放在参数列表的最后面，用于指定命名参数。
void settings(String time,{bool? isOk, String? name}){
  print("time: $time, isOk: $isOk, name: $name");
}

